﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web;
using System.Collections;
using System.IO;
using System.Threading.Tasks;
namespace WebApi.Controllers
{
    public class FileUploadController : ApiController
    {
        public Task<Hashtable> Upload()
        {

            // 检查是否是 multipart/form-data 

            if (!Request.Content.IsMimeMultipartContent("form-data"))
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            // 文件保存目录路径 
            //const string saveTempPath = "~/UploadFiles/";
            string dirTempPath = @"D:\\www.zhuzhan.com\\Uploadfiles\\Images\\";
            // 设置上传目录 
            var provider = new MultipartFormDataStreamProvider(dirTempPath);

            var task = Request.Content.ReadAsMultipartAsync(provider).
   ContinueWith<Hashtable>(o =>
   {
       Hashtable hash = new Hashtable();
       hash["code"] = -1;
       hash["message"] = "上传出错";
       var file = provider.FileData[0];//provider.FormData 
       string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');
       FileInfo fileinfo = new FileInfo(file.LocalFileName);
       //最大文件大小 
       int maxSize = 10000000;
       if (fileinfo.Length <= 0)
       {
           hash["code"] = -12;
           hash["message"] = "请选择上传文件。";
       }
       else if (fileinfo.Length > maxSize)
       {
           hash["code"] = -13;
           hash["message"] = "上传文件大小超过限制。";
       }
       else
       {
           string fileExt = orfilename.Substring(orfilename.LastIndexOf('.'));
           //定义允许上传的文件扩展名 
           String fileTypes = "gif,jpg,jpeg,png,bmp";
           if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1)
           {
               hash["code"] = -14;
               hash["message"] = "上传文件扩展名是不允许的扩展名。";
           }
           else
           {
               String ymd = DateTime.Now.ToString("yyyyMMdd", System.Globalization.DateTimeFormatInfo.InvariantInfo);
               String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", System.Globalization.DateTimeFormatInfo.InvariantInfo);
               fileinfo.CopyTo(Path.Combine(dirTempPath, newFileName + fileExt), true);
               fileinfo.Delete();
               hash["code"] = 0;
               hash["message"] = "上传成功";
               hash["data"] = "/Uploadfiles/Images/" + newFileName + fileExt;
           }
       }
       return hash;
   });
            return task;

        }
    }
}
